#include "StdAfx.h"
#include "Pila.h"

Pila::Pila(void)
{
	tope = NULL;
}

Pila::~Pila(void)
{
}

//recibe un dato y lo "empuja" en el tope de la pila
void Pila::push(std::string pDato){

	NodoPC* nuevo = new NodoPC(pDato);
	//incorpora el nodo nuevo al tope de la pila
	if (tope != NULL){
		nuevo->setSig(tope);
	}
	tope = nuevo;
}

//saca el nodo que esta en el tope de la pila y lo devuelve
NodoPC* Pila::pop(){
	NodoPC* aux = tope;
	//deberia eliminar el tope y retornar el aux
	if (tope != NULL){
		tope= tope->getSig();
	}
	aux->setSig(NULL);
	return aux;
}
    
//retorna el elemento que esta en el tope dela pila
NodoPC* Pila::top(){
	return tope;
}

char* Pila::muestrePila(){
	char res[1000];
	strcpy(res, "\n \n La pila tiene : \n \n");

	Pila* pilaAux = new Pila();
	while (tope!=NULL){
		strcat(res, top()->getDato().c_str());
		strcat(res, "\n");
		pilaAux->push( pop()->getDato().c_str());
	}
	// al terminar debe devolver los elementos a la pila original
	while (pilaAux->top() != NULL){
		push(pilaAux->pop()->getDato().c_str());
	}
	return res;
}

void Pila::invertirPila()
{
	Pila* pilaAux = new Pila();
	while(top()!=NULL)
		{
			pilaAux->push(pop()->getDato().c_str());
		}
	// al terminar debe devolver los elementos a la pila original
	tope = pilaAux->top();
}


